class FireBall extends AcGameObject{
    constructor (playground , player , x , y , radius , vx , vy , color , speed, move_length , damage) {
        super();
        this.playground = playground;
        this.player = player;
        this.ctx = this.playground.game_map.ctx;
        this.x = x
        this.y = y
        this.radius = radius 
        this.vx = vx
        this.vy = vy
        this.color = color
        this.speed = speed
        this.move_length = move_length   //距离
        this.eps = 0.01
        this.damage = damage // 伤害

        this.start()
    }
    start(){
        
    }

    update(){
        if ( this.move_length < this.eps){
            this.distory();
            return false;
        }
        this.update_move();
        if (this.player.character !== "enemy"){
            this.update_attack();
        }
        this.render();
    }

    update_move(){
        let moved = Math.min(this.move_length, this.speed * this.timedelta / 1000);
        this.x += this.vx * moved;
        this.y += this.vy * moved;
        this.move_length -= moved;
    }
    
    update_attack(){
        for(var i = 0 ; i < this.playground.players.length;i++){
            var player = this.playground.players[i]
            if(this.player !== player && this.is_collision(player)){
                this.attack(player);
                break;
            }
        }
    }

    get_dist(x1,y1,x2,y2){
        var dx = x1 - x2;
        var dy = y1 - y2;
        return Math.sqrt(dx*dx + dy*dy)
    }

    is_collision(player){
        let distance = this.get_dist(this.x,this.y,player.x,player.y)
        if(distance < this.radius + player.radius){
            return true
        }
        return false
    }
    
    

    attack(player){
        let angle = Math.atan2(player.y - this.y , player.x - this.x)
        player.is_attacked( angle, this.damage,1);

        if(this.playground.mode === "multi mode"){
            this.playground.mps.send_attack(player.uuid,player.x,player.y,angle, this.damage , this.uuid);
        }

        this.distory();
    }

    render(){
        var scale = this.playground.scale;
        this.ctx.beginPath();
        this.ctx.arc(this.x * scale,this.y * scale,this.radius * scale,0,Math.PI*2,false);
        this.ctx.fillStyle = this.color;
        this.ctx.fill();
    }

    on_distory(){
        let fireballs = this.player.fireballs;
        for (var i= 0 ; i<fireballs.length;i++){
            if(fireballs[i] === this){
                fireballs.splice(i, 1);
                break;
            }
        }
    }
}
